package main

import (
	"fmt"
	"log"
	"os"

	"github.com/joho/godotenv"
	"gitverse.ru/EYMikhievich/api-gigachat/internal/modules/clientGigaChat/config"
	"gitverse.ru/EYMikhievich/api-gigachat/internal/modules/clientGigaChat/interfaces/api"
	"gitverse.ru/EYMikhievich/api-gigachat/internal/modules/clientGigaChat/interfaces/api/token"
	"gitverse.ru/EYMikhievich/api-gigachat/internal/modules/clientGigaChat/usecases"
)

func main() {
	err := godotenv.Load()
	if err != nil {
		log.Fatal("Error loading .env file")
	}

	cfg := config.ConfigAPIGigachat{
		URLReceiveToken:    os.Getenv("GET_TOKEN_URL"),
		AuthorizeData:      os.Getenv("AUTHORIZE_DATA"),
		Scope:              os.Getenv("SCOPE"),
		BaseUrl:            os.Getenv("BASE_URL"),
		UpdatePeriodToken:  os.Getenv("UPDATE_PERIOD_TOKEN"),
		ClientID:           os.Getenv("CLIENT_ID"),
		SystemRoleGigachat: os.Getenv("SYSTEM_ROLE_GIGACHAT"),
		ModelGigachat:      os.Getenv("MODEL_GIGACHAT"),
		Stream:             os.Getenv("STREAM") == "true",
	}

	// Создаем и запускаем обновление токена
	tokenUpdater, err := token.NewTokenUpdater(cfg)
	if err != nil {
		log.Fatalf("Ошибка инициализации обновления токена: %v", err)
	}
	if err := tokenUpdater.UpdateToken(); err != nil {
		log.Fatalf("Ошибка обновления токена: %v", err)
	}
	tokenUpdater.Start()

	// Создаем клиента GigaChat
	client := api.NewGigaChatClient(tokenUpdater.Token, cfg.BaseUrl)

	// Создаем PRChecker
	prChecker := usecases.NewPRChecker(client, cfg.ModelGigachat, cfg.SystemRoleGigachat, cfg.Stream)

	// Использование PRChecker
	prDescription := "go func main(){fmt.Println(test)}"
	stream := make(chan string)
	go func() {
		err = prChecker.CheckPR(prDescription, stream)
		if err != nil {
			log.Fatalf("Ошибка проверки PR: %v", err)
		}
	}()

	// Чтение данных из канала stream и вывод их в консоль
	go func() {
		for msg := range stream {
			fmt.Println("Stream message:", msg)
		}
	}()

	select {}
}
